/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.web.wizards.beanjsp.ide.netbeans; import org.netbeans.modules.web.util.*; import org.netbeans.modules.web.wizards.beanjsp.ui.*; import org.netbeans.modules.web.wizards.wizardfw.MultiLineLabel; import java.awt.event.*; import java.util.HashSet; import java.io.*; import javax.swing.text.PlainDocument; import org.openide.awt.*; import org.openide.*; import org.openide.loaders.*; import org.openide.windows.*; import org.openide.explorer.*; import org.openide.explorer.view.BeanTreeView; import org.openide.nodes.*; import org.openide.cookies.*; import org.openide.loaders.DataFolder; import org.openide.util.NbBundle; import org.openide.util.HelpCtx; import org.openide.util.actions.CookieAction; import org.openide.util.actions.CallableSystemAction; import org.openide.nodes.Node; import org.openide.src.*; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileLock; import org.openide.loaders.DataObject; import org.openide.loaders.MultiDataObject; import org.openide.loaders.ExecSupport; import org.openide.execution.Executor; import org.openide.debugger.DebuggerType; import org.openide.loaders.DataFolder; import org.openide.TopManager; import org.openide.NotifyDescriptor; import org.openide.nodes.Node; import org.openide.util.NbBundle; import org.openide.util.actions.SystemAction; import java.util.*; public class IDEHelper { public static void openJSPFile(FileObject jspFileObject) { try { openJSPFile(TopManager.getDefault().getLoaderPool().findDataObject(jspFileObject)); }catch(Exception ex) { Debug.print(ex);} } public static void openJSPFile(DataObject jspDataObject) { // set default executor to JSP Executor if(jspDataObject instanceof MultiDataObject) { try { MultiDataObject jspMultiDataObject = (MultiDataObject) jspDataObject; //Executor defExec = findExecutor(JspExecutor.class); <- this makes the module dependent on jswdk module String jspExecutorClassName = "org.netbeans.modules.web.core.jswdk.JspExecutor"; //NOI18N Class jspExecutorClass = Class.forName(jspExecutorClassName); Executor defExec = findExecutor(jspExecutorClass); if (defExec != null) ExecSupport.setExecutor(jspMultiDataObject.getPrimaryEntry(), defExec); }catch(Exception ex) { Debug.print(ex); // I don't care for any exceptions here. so I silently ignore ( this is sometimes called ugly in style guide ) } } Node node = jspDataObject.getNodeDelegate (); // run default action (hopefully should be here) and it would be Open action SystemAction sa = node.getDefaultAction (); if (sa != null) { sa.actionPerformed (new ActionEvent (node, ActionEvent.ACTION_PERFORMED, "")); // NOI18N } } /** Finds an instance of an executor of the given class or null if no such * executor exists. */ protected static Executor findExecutor(Class executorClass) { for (Enumeration execs = Executor.getDefault().executors(); execs.hasMoreElements();) { Executor exec = (Executor)execs.nextElement(); if (executorClass.isInstance(exec)) return exec; } return null; } public static FileObject saveJSPFileAs(String name, String extension, StringBuffer fileDataBuffer, boolean overwrite) throws IOException { FileObject jspFileObj = saveJSPFileAs(JSPPageWizard.jspFolder.getPrimaryFile(),name,extension,fileDataBuffer.toString(),overwrite); openJSPFile(jspFileObj); return jspFileObj; } public static FileObject saveJSPFileAs(FileObject folderFile, String name, String extension, StringBuffer fileDataBuffer, boolean overwrite) throws IOException { return saveJSPFileAs(folderFile,name,extension,fileDataBuffer.toString(),overwrite); } //todo: Original NB code has some indentation mechanism. ask petr jerikka and add that here to indent JSP file public static FileObject saveJSPFileAs(FileObject folderFile, String name, String extension, String fileData, boolean overwrite) throws IOException { FileObject fo = null; try { fo = folderFile.createData(name, extension); }catch(IOException ex) { if(!overwrite) throw ex; fo = folderFile.getFileObject(name,extension); } FileLock lock = null; Writer wrFile = null; Writer beautyWrFile = null; try { wrFile = new OutputStreamWriter(fo.getOutputStream(lock = fo.lock())); try { beautyWrFile = org.openide.text.IndentEngine.find("text/x-jsp").createWriter(new PlainDocument(), 0, wrFile); // NOI18N }catch(Exception ex) {} // ignored ex safely if(beautyWrFile != null) { beautyWrFile.write(fileData); } else { wrFile.write(fileData); } return fo; } finally { try { if (wrFile != null) wrFile.close (); if(beautyWrFile != null) beautyWrFile.close(); } catch (IOException e) { if (Boolean.getBoolean("netbeans.debug.exceptions")) // NOI18N e.printStackTrace(); } if (lock != null) lock.releaseLock (); } } public static DataObject classToDataObject(String className) { className = className.replace('.', '/') + '.' + "class"; // NOI18N FileObject classFile = TopManager.getDefault().getRepository().findResource(className); if (classFile == null) return null; try { return TopManager.getDefault().getLoaderPool().findDataObject(classFile); } catch (IOException e) { return null; } } public static DataObject packageToDataObject(String packageName) { packageName = packageName.replace('.', '/'); // Debug.println("Finding package "+packageName); FileObject packageFile = TopManager.getDefault().getRepository().findResource(packageName); if (packageFile == null) { // Debug.println("Could not find package :"+packageName); return null; } try { return TopManager.getDefault().getLoaderPool().findDataObject(packageFile); } catch (IOException ex) { // Debug.print(ex); return null; } } // return Vector of classes public static Vector findBeansInFolder(String folderName) { DataFolder pakFolder = (DataFolder) packageToDataObject(folderName); return findBeansInFolder(pakFolder); } /* *** public static Vector findBeansInFolder(DataFolder pakFolder) { Vector beans = new Vector(); if(pakFolder == null) { return beans; } try { FileObject pakFileObj = pakFolder.getPrimaryFile(); Enumeration enum = pakFileObj.getData(false); for(; enum.hasMoreElements();) { FileObject classFileObj = (FileObject)enum.nextElement(); if(classFileObj.hasExt("class")) { Class beanClass = TopManager.getDefault().currentClassLoader().loadClass(classFileObj.getPackageName('.')); if(beanClass != null) beans.add(beanClass); } } }catch(Exception ex) { Debug.print(ex);} return beans; } *** */ public static Vector findBeansInFolder(DataFolder pakFolder) { Vector beans = new Vector(); if(pakFolder == null) { return beans; } try { pakFolder.getPrimaryFile().refresh(); DataObject[] dataObjects = pakFolder.getChildren(); for(int i=0; i < dataObjects.length; ++i) { try { InstanceCookie instanceCookie = (InstanceCookie)dataObjects[i].getCookie(InstanceCookie.class); if(instanceCookie != null) { Class beanClass = instanceCookie.instanceClass(); if(beanClass != null) beans.add(beanClass); } }catch(Exception ex) { // ignore the class cast exception for InstanceCookie // Debug.print(ex); } } }catch(Exception ex) {} // ignored exceptions safely return beans; } public static boolean acceptDataObjectForJSPPages(DataObject dataObj) { // return (oj instanceof DataFolder); if(dataObj instanceof DataFolder) { return true; } else { //// here look for .jsp file in this and return true FileObject jspFileObj = dataObj.getPrimaryFile(); if(jspFileObj == null) return false; if(jspFileObj.getExt().equalsIgnoreCase("jsp")) // NOI18N return true; if(jspFileObj.getExt().equalsIgnoreCase("html")) // NOI18N return true; if(jspFileObj.getExt().equalsIgnoreCase("htm")) // NOI18N return true; return false; } } public static boolean acceptDataObjectForBean(DataObject dataObj) { // return (oj instanceof DataFolder); if(dataObj instanceof DataFolder) { return true; } else { if(dataObj.getCookie(SourceCookie.class) == null) { return false; } else { //// here look for .class file in this and return true FileObject javaFileObj = dataObj.getPrimaryFile(); if(javaFileObj == null) return false; if(!javaFileObj.getExt().equalsIgnoreCase("java")) //NOI18N return false; if(!javaFileObj.existsExt("class")) //NOI18N return false; return true; } } } public static String browseForJSPPage() { DataFilter dataFilter = new DataFilter () { public boolean acceptDataObject (DataObject dataObj) { return acceptDataObjectForJSPPages(dataObj); } }; java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle); String title = resBundle.getString("JBW_WebPageBrowseDialogTitle"); //NOI18N String rootTitle = resBundle.getString("JBW_WebPageBrowseDialogRootTitle"); //NOI18N Node place = TopManager.getDefault().getPlaces().nodes().repository(dataFilter); try { Node[] selected = TopManager.getDefault().getNodeOperation().select(title, rootTitle, place, new NodeAcceptor() { public final boolean acceptNodes(Node[] nodes) { if (nodes == null || nodes.length != 1) return false; return nodes[0].getCookie(DataFolder.class) == null; } }); DataObject jspDataObject = (DataObject)selected[0].getCookie(DataObject.class); FileObject jspFileObject = jspDataObject.getPrimaryFile(); return jspFileObject.getPackageNameExt('/','.'); } catch (org.openide.util.UserCancelException ex) { return ""; //NOI18N } } public static DataFolder browseForBeanPackage() { java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle); String title = resBundle.getString("JBW_BeanPackageBrowseDialogTitle"); //NOI18N String rootTitle = resBundle.getString("JBW_BeanPackageBrowseDialogRootTitle"); //NOI18N DataFilter dataFilter = new DataFilter () { public boolean acceptDataObject (DataObject dataObj) { return acceptDataObjectForBean(dataObj); } }; return browseForFolder(dataFilter,title,rootTitle); } public static DataFolder browseForJSPFolder() { java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle); String title = resBundle.getString("JBW_JSPFolderBrowseDialogTitle"); //NOI18N String rootTitle = resBundle.getString("JBW_JSPFolderBrowseDialogRootTitle"); //NOI18N DataFilter dataFilter = new DataFilter () { public boolean acceptDataObject (DataObject dataObj) { return (dataObj instanceof DataFolder); } }; return browseForFolder(dataFilter,title,rootTitle); } public static DataFolder browseForFolder(DataFilter dataFilter,String title, String rootTitle) { Node place = TopManager.getDefault().getPlaces().nodes().repository(dataFilter); try { Node[] selected = TopManager.getDefault().getNodeOperation().select(title, rootTitle, place, new NodeAcceptor() { public final boolean acceptNodes(Node[] nodes) { if (nodes == null || nodes.length != 1) return false; return nodes[0].getCookie(DataFolder.class) != null; } }); DataFolder targetFolder = (DataFolder)selected[0].getCookie(DataFolder.class); return targetFolder; } catch (org.openide.util.UserCancelException ex) { return null; } } public static void showWarningMessageI18N(String i18nWarningMsg) { java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle); MultiLineLabel msgLabel = new MultiLineLabel(resBundle.getString(i18nWarningMsg)); msgLabel.setMinimumSize (new java.awt.Dimension(500, 75)); // msgLabel.setMaximumSize (new java.awt.Dimension(400, 75)); msgLabel.setPreferredSize (new java.awt.Dimension(600, 75)); NotifyDescriptor.Message msg = new NotifyDescriptor.Message(msgLabel,NotifyDescriptor.WARNING_MESSAGE); msg.setTitle(resBundle.getString("JBW_WarningMsgTitle")); // NOI18N TopManager.getDefault().notify(msg); } public static void showErrorMessageI18N(String i18nErrorMsg) { java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle); NotifyDescriptor.Message msg = new NotifyDescriptor.Message(resBundle.getString(i18nErrorMsg), NotifyDescriptor.ERROR_MESSAGE); msg.setTitle(resBundle.getString("JBW_ErrorMsgTitle")); // NOI18N TopManager.getDefault().notify(msg); } public static boolean askConfirmationI18N(String i18nQuestionMsg) { java.util.ResourceBundle resBundle = NbBundle.getBundle(JSPPageWizard.i18nBundle); NotifyDescriptor.Confirmation confirm = new NotifyDescriptor.Confirmation(resBundle.getString(i18nQuestionMsg), resBundle.getString("JBW_ConfirmMsgTitle"), //NOI18N NotifyDescriptor.YES_NO_OPTION); Object confirmOption = TopManager.getDefault().notify(confirm); return confirmOption.equals(NotifyDescriptor.YES_OPTION); } //todo if folder is null , check for the file in repository root. public static boolean fileExists(DataFolder folder, String name, String ext) { if(folder != null) { if(folder.getPrimaryFile().getFileObject(name,ext) != null) return true; } return false; } }